条件表达式 (CASE WHEN)
概述
在 SQL 中,CASE WHEN 是一种强大的条件表达式,允许你在查询中根据不同的条件返回不同的值。它类似于编程语言中的 if-else 语句,但专门用于 SQL 查询中。CASE WHEN 可以用于各种场景,如数据转换、条件过滤和生成报告。
基本语法
CASE WHEN 的基本语法如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
condition1,condition2, ...: 这些是布尔表达式,用于判断是否满足某个条件。result1,result2, ...: 如果对应的condition为真,则返回该结果。default_result: 如果所有条件都不满足,则返回默认结果。
示例
示例 1: 简单的条件判断
假设我们有一个 employees 表,其中包含员工的 salary 和 department 信息。我们想要根据员工的薪水等级来标记他们。
SELECT
employee_id,
salary,
CASE
WHEN salary > 100000 THEN 'High'
WHEN salary BETWEEN 50000 AND 100000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM
employees;
在这个例子中,我们根据 salary 的不同范围,将员工分为 High, Medium, 和 Low 三个等级。
示例 2: 在 WHERE 子句中使用 CASE WHEN
我们也可以在 WHERE 子句中使用 CASE WHEN 来过滤数据。例如,我们只想查询薪水等级为 High 的员工。
SELECT
employee_id,
salary
FROM
employees
WHERE
CASE
WHEN salary > 100000 THEN 'High'
ELSE NULL
END = 'High';
示例 3: 在 ORDER BY 子句中使用 CASE WHEN
我们还可以在 ORDER BY 子句中使用 CASE WHEN 来根据条件对结果进行排序。例如,我们希望首先按 department 排序,然后在每个部门内按 salary 排序。
SELECT
employee_id,
department,
salary
FROM
employees
ORDER BY
department,
CASE
WHEN salary > 100000 THEN 1
ELSE 2
END;
在这个例子中,薪水高于 100000 的员工会排在前面。
实践练习
练习 1: 薪水等级报告
假设你有一个 employees 表,其中包含 employee_id, name, salary, 和 department 字段。请编写一个查询,生成一个报告,显示每个员工的 name, salary, 和 salary_level(High, Medium, Low)。
SELECT
name,
salary,
CASE
WHEN salary > 100000 THEN 'High'
WHEN salary BETWEEN 50000 AND 100000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM
employees;
练习 2: 部门薪水统计
编写一个查询,统计每个部门的平均薪水,并根据平均薪水的高低标记部门为 High, Medium, 或 Low。
SELECT
department,
AVG(salary) AS avg_salary,
CASE
WHEN AVG(salary) > 100000 THEN 'High'
WHEN AVG(salary) BETWEEN 50000 AND 100000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM
employees
GROUP BY
department;
总结
CASE WHEN 是 SQL 中非常有用的条件表达式,允许你在查询中根据不同的条件返回不同的值。它可以在 SELECT, WHERE, ORDER BY 等子句中使用,帮助你实现复杂的数据处理和报告生成。通过本教程的学习,你应该能够理解并应用 CASE WHEN 来解决实际的数据库查询问题。